import * as React from 'react'; import { Card, Expander, ExpanderItem, Grid, GridContainerStyleProps, GridItemStyleProps, useTheme, } from '@aws-amplify/ui-react'; import { Demo } from '@/components/Demo'; import { demoState } from '@/utils/demoState'; import { GridContainerPropControls } from './GridContainerPropControls'; import { GridItemPropControls, GridItemPropControlsProps, } from './GridItemPropControls'; import { useGridItemProps } from './useGridItemProps'; import { useGridContainerProps } from './useGridContainerProps'; import { getPropString } from '../utils/getPropString'; const propsToHeaderGridItemCode = (props: GridItemPropControlsProps) => { return ( '' + '\n Header' + '\n ' ); }; const propsToNavGridItemCode = (props: GridItemPropControlsProps) => { return ( '' + '\n Nav' + '\n ' ); }; const propsToMainGridItemCode = (props: GridItemPropControlsProps) => { return ( '' + '\n Main' + '\n ' ); }; const propsToFooterGridItemCode = (props: GridItemPropControlsProps) => { return ( '' + '\n Footer' + '\n ' ); }; const propsToCode = (props: GridContainerStyleProps, children: string) => { return ( '' + children + '\n' ); }; const defaultGridContainerStyleProps: GridContainerStyleProps = { alignContent: '', alignItems: '', autoColumns: '', autoFlow: '', autoRows: '', columnGap: '0.5rem', gap: '', justifyContent: '', rowGap: '0.5rem', templateColumns: '1fr 1fr 1fr', templateRows: '1fr 3fr 1fr', }; const defaultHeaderGridItemStyleProps: GridItemStyleProps = { columnStart: '1', columnEnd: '-1', rowStart: '', rowEnd: '', }; const defaultFooterGridItemStyleProps: GridItemStyleProps = { ...defaultHeaderGridItemStyleProps, columnStart: '2', columnEnd: '-1', }; const defaultNavGridItemStyleProps: GridItemStyleProps = { ...defaultHeaderGridItemStyleProps, columnStart: '1', columnEnd: '2', rowSpan: 2, }; const defaultMainGridItemStyleProps: GridItemStyleProps = { ...defaultHeaderGridItemStyleProps, columnStart: '2', columnEnd: '-1', }; export const GridDemo = () => { const theme = useTheme(); const gridContainerProps = useGridContainerProps( demoState.get('GridContainer') || defaultGridContainerStyleProps ); const headerGridItemProps = useGridItemProps( demoState.get('GridItemHeader') || { ...defaultHeaderGridItemStyleProps, name: 'GridItemHeader', } ); const footerGridItemProps = useGridItemProps( demoState.get('GridItemFooter') || { ...defaultFooterGridItemStyleProps, name: 'GridItemFooter', } ); const navGridItemProps = useGridItemProps( demoState.get('GridItemNav') || { ...defaultNavGridItemStyleProps, name: 'GridItemNav', } ); const mainGridItemProps = useGridItemProps( demoState.get('GridItemMain') || { ...defaultMainGridItemStyleProps, name: 'GridItemMain', } ); // To retain expanded items between light and dark mode const [value, setValue] = React.useState( demoState.get('GridDemoExpandedItems') || '' ); const handleExpandChange = React.useCallback((value: string | string[]) => { demoState.set('GridDemoExpandedItems', value); setValue(value); }, []); const gridItemsCode = `\n ${propsToHeaderGridItemCode(headerGridItemProps)}` + `\n ${propsToNavGridItemCode(navGridItemProps)}` + `\n ${propsToMainGridItemCode(mainGridItemProps)}` + `\n ${propsToFooterGridItemCode(footerGridItemProps)}`; return ( } > Header Nav Main Footer ); };